Over-the-Air NVIDIA Jetson - RAUC
RAUC on Jetson using OE4T
This wiki is a didactical guide to integrating and validating RAUC on NVIDIA Jetson platforms using OE4T / meta-tegra / tegra-demo-distro.
It is intended to help you:
- Understand what RAUC is and why it is useful for Jetson A/B updates
- Learn how RAUC fits into OE4T / Yocto
- Bring up a working target where rauc.service runs correctly
- Build and install a signed .raucb bundle
- Understand how slot detection works using root= and rauc.slot=
- Implement and understand a custom bootloader backend for Jetson using extlinux
- Explore advanced topics such as adaptive updates, persistent state, and custom storage layouts
Version note
This documentation reflects the integration work performed on Jetson AGX Orin using OE4T tegra-demo-distro and meta-rauc on a Scarthgap-based environment.
Always treat the README files and metadata corresponding to the exact branch you are using as the source of truth.
Getting Started
- Bring-up and Yocto Integration — base integration, service startup, kernel cmdline, and target validation.
- Update Flow and Custom Bootloader — bundle creation, signed updates, extlinux A/B switching, and custom backend design.
- Advanced Topics and Troubleshooting — adaptive updates, persistent state design, and failure modes.
Introduction
This documentation describes the investigation and integration work performed to enable RAUC (Robust Auto-Update Controller) on an NVIDIA Jetson platform using the OE4T (OpenEmbedded for Tegra) tegra-demo-distro.
The goal of the project is to prepare a reliable A/B update mechanism for Jetson devices using Yocto, RAUC, and the OE4T BSP, documenting the full path from research to a working RAUC service running on target.
Research and Initial Investigation
RAUC
RAUC is an update framework designed for embedded Linux systems that provides:
- Atomic system updates
- A/B slot management
- Cryptographic verification of update bundles
- Rollback safety
For Jetson devices, RAUC is attractive because it integrates well with Yocto and supports rootfs-based A/B updates.
Constraints on Jetson
During the investigation phase, the following constraints were identified:
- Jetson boot flow is not GRUB/UBoot-based by default
- OE4T uses cboot + UEFI + extlinux depending on configuration
- RAUC bootloader backends (grub, barebox, uboot) do not directly support Jetson
As a result, the initial approach was:
- Use RAUC with the noop bootloader backend
- Manually handle A/B switching via kernel command line
Relevant Layers and Where to Find Them
meta-tegra and tegra-demo-distro
OE4T provides the NVIDIA Jetson BSP and demo distro.
- Repository: tegra-demo-distro
- Main layers used:
- meta
- meta-tegra
- meta-tegra-community
- meta-tegrademo
The demo distro provides:
- Predefined machines (e.g. p3737-0000-p3701-0005)
- Demo image recipes (demo-image-base, demo-image-full, etc.)
- Flashing artifacts (tegraflash tarballs, initrd flash images)
meta-rauc
RAUC Yocto integration is provided by the meta-rauc layer.
- Repository: meta-rauc
- Provides:
- rauc
- rauc-native
- rauc-conf (since scarthgap)
- bundle.bbclass
Important note:
Since scarthgap, RAUC configuration is split into a separate recipe (rauc-conf). All system-specific configuration must be provided via a rauc-conf.bbappend.